Django 教程 11:部署 Django 到生产环境 |
您所在的位置:网站首页 › django 连接数据库包括 › Django 教程 11:部署 Django 到生产环境 |
本节介绍了你需要对 LocalLibrary 应用程序进行的更改,以使其在 Heroku 上运行。虽然 Heroku 的在 Heroku 使用 Django 入门教程,假设你将使用 Heroku 客户端,来运行你的本地开发环境,但我们的更改,与现有的 Django 开发服务器,以及我们已经学习的工作方式兼容。 Procfile在 GitHub 储存库的根目录中,创建文件Procfile(无扩展名),以声明应用程序的进程类型和入口点。将以下文本复制到其中: web: gunicorn locallibrary.wsgi --log-file -“web:”告诉 Heroku,这是一个 web dyno,可以发送 HTTP 流量。在这个 dyno 中启动的进程,是 gunicorn,这是 Heruko 推荐的一种流行的 Web 应用程序服务器。我们使用模块 locallibrary.wsgi(使用我们的应用程序框架创建:/locallibrary/wsgi.py )中的配置信息启动 Gunicorn。 GunicornGunicorn 是推荐的 HTTP 服务器,用于 Heroku 上的 Django(如上面的 Procfile 中所述)。它是一个用于 WSGI 应用程序的纯 Python HTTP 服务器,可以在一个 dyno 中,运行多个 Python 并发进程(有关更多信息,请参阅使用 Gunicorn 部署 Python 应用程序)。 虽然在开发期间,我们不需要 Gunicorn 为我们的 LocalLibrary 应用程序提供服务,但我们将安装它,以便它成为我们在远程服务器上设置 Heroku 的 requirements 的一部分。 使用 pip(我们在设置开发环境时安装)在命令行上,将 Gunicorn 安装到本地: bashpip3 install gunicorn 数据库配置我们不能在 Heroku 上使用默认的 SQLite 数据库,因为它是基于文件的,并且每次应用程序重新启动时,都会从暂时的文件系统中删除它(通常每天一次,每次应用程序或其配置变量被更改时)。 处理这种情况的 Heroku 机制,是使用数据库加载项,并使用来自加载项设置的环境配置变量的信息,来配置 Web 应用程序。有很多数据库选项,但我们将使用 Heroku postgres 数据库的爱好者等级,因为它是免费的,被 Django 所支持,并在使用免费的爱好者 dyno 计划等级时,会自动添加到新的 Heroku 应用程序。 使用名为DATABASE_URL的配置变量,将数据库连接信息提供给 Web dyno。Heroku 建议开发人员使用 dj-database-url 套件包,以解析DATABASE_URL环境变量,并自动将其转换为 Django 所需的配置格式,而不是将此信息硬编码到 Django 中。除了安装 dj-database-url 套件包之外,我们还需要安装psycopg2,因为 Django 需要它与 Postgres 数据库进行交互。 dj-database-url (Django database configuration from environment variable)在本地安装 dj-database-url,使其成为我们在远程服务器上设置 Heroku 的 requirements 的一部分: bashpip3 install dj-database-url settings.py打开 /locallibrary/settings.py,并将以下配置复制到文件的底部: python# Heroku: Update database configuration from $DATABASE_URL. import dj_database_url db_from_env = dj_database_url.config(conn_max_age=500) DATABASES['default'].update(db_from_env)备注: 我们仍然会在开发期间使用 SQLite,因为我们的开发计算机上不会设置DATABASE_URL环境变量。 conn_max_age=500的值使连接持久,这比在每个请求周期重新创建连接更有效。但是,这是可选的,如果需要可以删除。 psycopg2 (Python Postgres database support)Django 需要 psycopg2 来处理 Postgres 数据库,你需要将它添加到requirements.txt 中,以便 Heroku 在远程服务器上进行设置(如下面的 requirements 部分所述)。 Django 默认会在本地使用我们的 SQLite 数据库,因为我们的本地环境中,没有设置DATABASE_URL环境变量。如果你想完全切换到 Postgres,并使用我们的 Heroku 免费等级数据库,进行开发和生产,那么你可以这么做。例如,要在基于 Linux 的系统上,本地安装 psycopg2 及其依赖项,你将使用以下 bash / terminal 命令: bashsudo apt-get install python-pip python-dev libpq-dev postgresql postgresql-contrib pip3 install psycopg2有关其他平台的安装说明,请访问 psycopg2 网站。 但是,你不需要这样做 - 你不需要在本地计算机上激活 PostGreSQL,只要将其作为要求(requirement)提供给 Heroku,请参阅requirements.txt(见下文)。 在生产环境中提供静态文件在开发过程中,我们使用 Django 和 Django 开发 Web 服务器,来提供静态文件(CSS,JavaScript 等)。在生产环境中,我们通常提供来自内容传送网络(CDN)或 Web 服务器的静态文件。 备注: 通过 Django/web 应用程序提供静态文件是低效的,因为请求必须通过不必要的附加代码(Django),而不是由 Web 服务器或完全独立的 CDN 直接处理。虽然这对于开发期间的本地使用无关紧要,但如果我们在生产环境中使用相同的方法,则会对性能产生重大影响。 为了便于将静态文件与 Django Web 应用程序分开托管,Django 提供了 collectstatic 工具,来收集这些文件以进行部署(有一个设置变量,用于定义在运行 collectstatic 时,应该收集文件的位置)。Django 模板是指相对于设置变量(STATIC_URL)的静态文件的托管位置,因此如果将静态文件移动到另一个主机/服务器,则可以更改此位置。 相关的设置变量是: STATIC_URL: 这是将提供静态文件的基本 URL 位置,例如,在 CDN 上。这用于在我们的基本模板中访问的静态模板变量(请参阅 Django 教程 5:创建我们的主页)。 STATIC_ROOT: 这是 Django 的“collectstatic”工具将收集模板中引用的任何静态文件的目录的绝对路径。收集完成后,可以将这些文件,作为一个组上载到托管文件的任何位置。 STATICFILES_DIRS: 这列出了 Django 的 collectstatic 工具应该搜索静态文件的其他目录。 settings.py打开 /locallibrary/settings.py,并将以下配置,复制到文件的底部。 BASE_DIR 应该已经在你的文件中定义了(STATIC_URL可能已经在文件创建时已经定义。虽然它不会造成任何伤害,但你也可以删除重复的先前引用)。 python# Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/2.0/howto/static-files/ # The absolute path to the directory where collectstatic will collect static files for deployment. STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') # The URL to use when referring to static files (where they will be served from) STATIC_URL = '/static/'我们实际上,将使用名为 WhiteNoise 的库来提供文件,我们将在下一节中安装和配置。 有关更多信息,请参阅 Django 和静态资产(Heroku 文档)。 Whitenoise有许多方法可以在生产环境中提供静态文件(我们在前面的部分中看到了相关的 Django 设置)。Heroku 建议在生产环境中使用 WhiteNoise 项目,直接从 Gunicorn 提供静态资产。 备注: Heroku 会在上传你的应用程序后,自动调用 collectstatic 并准备静态文件,以供 WhiteNoise 使用。查看 WhiteNoise 文档,了解其工作原理以及实现,为什么是提供这些文件的相对有效方法。 设置 WhiteNoise 以便在项目中使用的步骤如下: 安装 WhiteNoise使用以下命令在本地安装 whitenoise: bashpip3 install whitenoise settings.py要将 WhiteNoise 安装到你的 Django 应用程序中,请打开 /locallibrary/settings.py,找到MIDDLEWARE设置,并在SecurityMiddleware正下方的列表顶部附近,添加WhiteNoiseMiddleware: pythonMIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'whitenoise.middleware.WhiteNoiseMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ]这是可选的,你可以在提供静态文件时,减小它们的大小(这样更有效)。只需将以下内容添加到 /locallibrary/settings.py 的底部: python# Simplified static file serving. # https://warehouse.python.org/project/whitenoise/ STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage' RequirementsWeb 应用程序的 Python requirements,必须放在储存库根目录中的文件 requirements.txt 中。然后 Heroku 将在重建你的环境时,自动安装它们。你可以在命令行上,使用 pip 创建此文件(在 repo 根目录中,运行以下命令): bashpip3 freeze > requirements.txt安装上面所有不同的依赖项后,你的 requirements.txt 文件,应至少列出这些项目(尽管版本号可能不同)。请删除下面未列出的任何其他依赖项,除非你已为此应用程序明确添加它们。 dj-database-url==0.4.1 Django==2.0 gunicorn==19.6.0 psycopg2==2.6.2 whitenoise==3.2.2备注: 确保存在类似上面的 psycopg2 的那一行!即使你没有在本地安装它,你仍然应该将它添加到requirements.txt。 Runtimeruntime.txt 文件(如果已定义)告诉 Heroku 使用哪种编程语言。在 repo 的根目录中,创建文件并添加以下文本: python-3.6.4备注: Heroku 只支持少量的 Python 运行库(在编写本文时,包括上面的那个)。Heroku 将使用受支持的运行库,而不管此文件中指定的值。 将更改保存到 Github 并重新测试接下来,我们将所有更改保存到 Github。在终端(我们的存储库中的 whist)中,输入以下命令: pythongit add -A git commit -m "Added files and changes required for deployment to heroku" git push origin master在我们继续之前,让我们在本地,再次测试网站,并确保它不受上述任何更改的影响。像往常一样运行开发 Web 服务器,然后检查站点,是否仍然按预期在浏览器上运行。 bashpython3 manage.py runserver我们现在应该准备开始在 Heroku 上部署 LocalLibrary。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |